1. The Field of the Invention
This invention relates generally to the field of memory management devices for use in a computer network. In particular, embodiments of the present invention relate to an integrated credit based buffer management scheme for use in a memory first-in first-out (FIFO) control application.
2. The Relevant Technology
Most computer devices and processors have some form of memory or storage device for the purpose of storing data. Often, a processor or a computer operates with multiple clients, which may be applications or hardware devices, that require access to the stored data. Thus, the stored data must be accessible by the various applications and devices used within the system. To facilitate this accessibility, particularly for processors or computers that have multiple clients that require access to the stored data substantially contemporaneously with each other, some form of switching device must be used to switch between various links to the data within the storage device.
One common technique for providing substantially contemporaneous access to stored data is to establish multiple ports, each of which can be used by a different client. An arbiter is a common switching device that manages the requests for data made from multiple clients, determines the appropriate priority of the multiple requests, and switches between the various ports to enable the requests to be serviced. Unfortunately, switching systems such as an arbiter introduce additional delay when a particular client requests data from the memory, much of which results from that fact that, from the standpoint of the client, the timing by which the arbiter grants access to the memory through the associated port is unpredictable.
In addition to providing accessibility to the data within a computer system, it is also important to manage the data flow between a particular client, such as a device or application, and the memory. A client typically has a buffer, such as a first-in first-out (FIFO) buffer, that receives data that has been requested from the memory. The buffer is used because the timing by which the data is received from the memory is unpredictable due to the necessity of a switching device between the client and the memory and the variable latency associated with data requests. The buffer enables sufficient data to be immediately accessible to the client as the client requires the data for processing operations.
The size of a FIFO buffer for a particular client is selected based on several factors, including the variability or unpredictability of the latency associated with the data requests and the degree to which a continual stream of data is required by the client. Assuming that the client cannot tolerate loss of continuous data, the buffer must be large enough to avoid an overflow situation in which the buffer is full when additional data requests are serviced, and an underflow situation, in which the data in the buffer is depleted before additional data requests are serviced. The problem of ensuring that continuous data is available to the client from the buffer can generally be solved by using a buffer that is sufficiently large to avoid the overflow situation or to have sufficient bandwidth between the buffer and the memory such that the latency is reduced. However, either of these approaches to the problem is expensive.